home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / General Tools / EgThread.cpp < prev    next >
C/C++ Source or Header  |  1999-07-13  |  2KB  |  107 lines

  1. #include "EgThread.h"
  2.  
  3.  
  4. #ifdef EG_MAC
  5. #include <Events.h>
  6. #define __millisTime        ::TickCount() * 17
  7. #else
  8. #include <windows.h>
  9. #define __millisTime        timeGetTime()
  10. #endif
  11.  
  12. XPtrList    EgThread::sThreadList;
  13.  
  14.  
  15. EgThread::EgThread( long inTimeDelay, int inOwnedElsewhere ) :
  16.     mOwnedElsewhere( inOwnedElsewhere ),
  17.     mStopped( false ),
  18.     mDelay( inTimeDelay ),
  19.     mLastExecuted( 0 ),
  20.     mResumeTime( 0 ) {
  21.     
  22.     sThreadList.Add( this );
  23. }
  24.  
  25.  
  26. EgThread::~EgThread() {
  27.  
  28.     sThreadList.Remove( this );
  29. }
  30.  
  31.  
  32.  
  33. void EgThread::DoThreads() {
  34.     long        time = __millisTime;
  35.     EgThread*    threadPtr;
  36.     int            i, n = sThreadList.Count();
  37.     
  38.     for ( i = 1; i <= n; i++ ) {
  39.         threadPtr = (EgThread*) sThreadList.Fetch( i );
  40.         if ( ! threadPtr -> mStopped ) {
  41.             if ( time >= threadPtr -> mResumeTime ) {
  42.                 threadPtr -> mLastExecuted = time;
  43.                 threadPtr -> mResumeTime = time + threadPtr -> mDelay;
  44.                 threadPtr -> SpendTime();
  45.             } }
  46.         else {
  47.             sThreadList.RemoveElement( i );
  48.             if ( ! threadPtr -> mOwnedElsewhere )
  49.                 delete threadPtr;
  50.             i--;
  51.             n--;
  52.         }
  53.     }
  54. }
  55.  
  56.  
  57. void EgThread::Sleep( long inSleepTime ) {
  58.     mResumeTime = __millisTime + inSleepTime;
  59. }
  60.  
  61.  
  62. void EgThread::StopAllThreads() {
  63.     EgThread*    threadPtr;
  64.     int            i, n = sThreadList.Count();
  65.     
  66.     // Stop all the threads first
  67.     for ( i = 1; i <= n; i++ ) {
  68.         threadPtr = (EgThread*) sThreadList.Fetch( i );
  69.         threadPtr -> Stop();
  70.     }
  71.  
  72.     // Then delete each one we own
  73.     for ( i = 1; i <= n; i++ ) {
  74.         threadPtr = (EgThread*) sThreadList.Fetch( i );    
  75.         if ( ! threadPtr -> mOwnedElsewhere )
  76.             delete threadPtr;
  77.     }    
  78.     
  79.     sThreadList.RemoveAll();
  80. }
  81.  
  82.  
  83. void EgThread::Suspend() {
  84.     mResumeTime = 0xFFFFFFFF;
  85. }
  86.  
  87.  
  88. void EgThread::Resume() {
  89.     mResumeTime = 0;
  90. }
  91.         
  92.         
  93. void EgThread::Stop() {
  94.  
  95.     if ( ! mStopped ) {
  96.         mStopped = true;
  97.         StopSelf();
  98.     }
  99. }
  100.  
  101.  
  102. void EgThread::StopSelf() {
  103.  
  104.  
  105. }
  106.  
  107.